import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'

// Element Plus 语言配置映射
const elementPlusLocales = {
	zh: zhCn,
	en: en,
}

// 当前Element Plus语言
let currentElementPlusLocale = zhCn

// 语言切换回调函数数组
const localeChangeCallbacks = []

// 切换Element Plus语言
export const changeElementPlusLocale = (langCode) => {
	const newLocale = elementPlusLocales[langCode]
	if (newLocale && newLocale !== currentElementPlusLocale) {
		currentElementPlusLocale = newLocale

		// 通知所有注册的回调函数
		localeChangeCallbacks.forEach((callback) => {
			try {
				callback(newLocale, langCode)
			} catch (error) {
				console.error('Language change callback error:', error)
			}
		})

		// 触发全局事件
		window.dispatchEvent(
			new CustomEvent('element-plus-locale-change', {
				detail: { locale: newLocale, langCode },
			})
		)
	}
}

// 获取当前Element Plus语言
export const getCurrentElementPlusLocale = () => {
	return currentElementPlusLocale
}

// 注册语言切换回调
export const onElementPlusLocaleChange = (callback) => {
	localeChangeCallbacks.push(callback)
}

// 移除语言切换回调
export const offElementPlusLocaleChange = (callback) => {
	const index = localeChangeCallbacks.indexOf(callback)
	if (index > -1) {
		localeChangeCallbacks.splice(index, 1)
	}
}

// 初始化语言设置
export const initElementPlusLocale = (langCode) => {
	changeElementPlusLocale(langCode)
}

// 使用示例：
// 1. 在组件中切换语言：
// import { changeElementPlusLocale } from '@/utils/languageManager'
// changeElementPlusLocale('en') // 切换到英文
// changeElementPlusLocale('zh') // 切换到中文
//
// 2. 监听语言变化：
// import { onElementPlusLocaleChange, offElementPlusLocaleChange } from '@/utils/languageManager'
// const handleChange = (newLocale, langCode) => {
//   console.log('Element Plus语言已切换到:', langCode)
// }
// onElementPlusLocaleChange(handleChange)
// // 记得在组件卸载时移除监听
// onUnmounted(() => {
//   offElementPlusLocaleChange(handleChange)
// })
